﻿using System;
using System.IO;
using System.Xml;

namespace XMLHandle
{


    public class XmlHelper
    {

        public static XmlDocument LoadXml(string XmlFile)
        {
            XmlDocument objXmlDoc = new XmlDocument();
            try
            {
                if (File.Exists(XmlFile))
                {
                    File.Delete(XmlFile);
                }

                XmlDeclaration xmldec = objXmlDoc.CreateXmlDeclaration("1.0", "GB2312", "yes");
                objXmlDoc.AppendChild(xmldec);


            }
            catch (Exception ex)
            {

                throw ex;
            }



            return objXmlDoc;

        }
        //    protected string strXmlFile;
        //    protected XmlDocument objXmlDoc = new XmlDocument();

        //    public XmlHelper(string XmlFile)
        //    {
        //        // 
        //        // TODO: 在这里加入建构函式的程序代码 
        //        // 
        //        try
        //        {

        //            objXmlDoc.Load(XmlFile);
        //        }

        //        catch (FileNotFoundException)
        //        {
        //            XmlDeclaration xmldec= objXmlDoc.CreateXmlDeclaration("1.0", "GB2312", "yes");
        //            objXmlDoc.AppendChild(xmldec);

        //        }
        //        catch (Exception ex)
        //        {
        //            throw ex;
        //        }
        //        strXmlFile = XmlFile;
        //    }

        //    public DataTable GetData(string XmlPathNode)
        //    {
        //        //查找数据。返回一个DataView 
        //        DataSet ds = new DataSet();
        //        StringReader read = new StringReader(objXmlDoc.SelectSingleNode(XmlPathNode).OuterXml);
        //        ds.ReadXml(read);
        //        return ds.Tables[0];
        //    }
        //    /// <summary>
        //    /// 新节点内容。
        //    /// 示例：xmlTool.Replace("Book/Authors[ISBN=\"0002\"]/Content","ppppppp"); 
        //    /// </summary>
        //    /// <param name="XmlPathNode"></param>
        //    /// <param name="Content"></param>
        //    public void Replace(string XmlPathNode, string Content)
        //    {
        //        //更新节点内容。 
        //        objXmlDoc.SelectSingleNode(XmlPathNode).InnerText = Content;
        //    }

        //    /// <summary>
        //    /// 删除一个指定节点的子节点。 
        //    /// 示例： xmlTool.DeleteChild("Book/Authors[ISBN=\"0003\"]"); 
        //    /// </summary>
        //    /// <param name="Node"></param>
        //    public void DeleteChild(string Node)
        //    {
        //        //删除一个节点。 
        //        string mainNode = Node.Substring(0, Node.LastIndexOf("/"));
        //        objXmlDoc.SelectSingleNode(mainNode).RemoveChild(objXmlDoc.SelectSingleNode(Node));
        //    }



        //    /// <summary>

        //    /// * 使用示列:
        //    /// 示例： XmlHelper.Delete( "/Node", "")
        //    /// XmlHelper.Delete( "/Node", "Attribute")
        //    /// </summary>
        //    /// <param name="node">节点</param>
        //    /// <param name="attribute">属性名，非空时删除该节点属性值，否则删除节点值</param>
        //    public void Delete(string node, string attribute)
        //    {
        //        try
        //        {

        //            XmlNode xn = objXmlDoc.SelectSingleNode(node);
        //            XmlElement xe = (XmlElement)xn;
        //            if (attribute.Equals(""))
        //                xn.ParentNode.RemoveChild(xn);
        //            else
        //                xe.RemoveAttribute(attribute);

        //        }
        //        catch { }
        //    }
        //    /// <summary>
        //    /// 添加根节点
        //    /// </summary>
        //    /// <param name="MainNode"></param>
        //    public void InsertMainNode(string MainNode)
        //    {
        //        XmlElement rootElement = objXmlDoc.CreateElement(MainNode);
        //        objXmlDoc.AppendChild(rootElement);

        //    }
        //    /// <summary>
        //    /// 插入一节点和此节点的一子节点。 
        //    /// 示例：xmlTool.InsertNode("Book","Author","ISBN","0004"); 
        //    /// </summary>
        //    /// <param name="MainNode">主节点</param>
        //    /// <param name="ChildNode">子节点</param>
        //    /// <param name="Element">元素</param>
        //    /// <param name="Content">内容</param>
        //    public void InsertNode(string MainNode, string ChildNode, string Element, string Content)
        //    {
        //        //插入一节点和此节点的一子节点。 
        //        XmlNode objRootNode = objXmlDoc.SelectSingleNode(MainNode);
        //        XmlElement objChildNode = objXmlDoc.CreateElement(ChildNode);
        //        objRootNode.AppendChild(objChildNode);
        //        XmlElement objElement = objXmlDoc.CreateElement(Element);
        //        objElement.InnerText = Content;
        //        objChildNode.AppendChild(objElement);
        //    }

        //    /// <summary>
        //    /// 插入一个节点，带一属性。
        //    /// 示例： xmlTool.InsertElement("Book/Author[ISBN=\"0004\"]","Title","Sex","man","iiiiiiii"); 
        //    /// </summary>
        //    /// <param name="MainNode">主节点</param>
        //    /// <param name="Element">元素</param>
        //    /// <param name="Attrib">属性</param>
        //    /// <param name="AttribContent">属性内容</param>
        //    /// <param name="Content">元素内容</param>
        //    public void InsertElement(string MainNode, string Element, string Attrib, string AttribContent, string Content)
        //    {
        //        //插入一个节点，带一属性。 
        //        XmlNode objNode = objXmlDoc.SelectSingleNode(MainNode);
        //        XmlElement objElement = objXmlDoc.CreateElement(Element);
        //        objElement.SetAttribute(Attrib, AttribContent);
        //        if (!string.IsNullOrEmpty(Content))
        //        {
        //            objElement.InnerText = Content;

        //        }
        //        objNode.AppendChild(objElement);
        //    }
        //    /// <summary>
        //    /// 插入一个节点，不带属性。
        //    /// 示例：xmlTool.InsertElement("Book/Author[ISBN=\"0004\"]","Content","aaaaaaaaa"); 
        //    /// </summary>
        //    /// <param name="MainNode">主节点</param>
        //    /// <param name="Element">元素</param>
        //    /// <param name="Content">元素内容</param>
        //    public void InsertElement(string MainNode, string Element, string Content)
        //    {
        //        //插入一个节点，不带属性。 
        //        XmlNode objNode = objXmlDoc.SelectSingleNode(MainNode);
        //        XmlElement objElement = objXmlDoc.CreateElement(Element);
        //        objElement.InnerText = Content;
        //        objNode.AppendChild(objElement);
        //    }

        //    /// <summary>
        //    /// 对xml文件做插入，更新，删除后需做Save()操作，以保存修改
        //    /// </summary>
        //    public void Save()
        //    {
        //        //保存文檔。 
        //        try
        //        {
        //            objXmlDoc.Save(strXmlFile);
        //        }
        //        catch (System.Exception ex)
        //        {
        //            throw ex;
        //        }
        //        objXmlDoc = null;
        //    }
        //}

        //=========================================================

        //实例应用：

        //string strXmlFile = Server.MapPath("TestXml.xml"); 
        //XmlControl xmlTool = new XmlControl(strXmlFile);

        // 数据显视 
        // dgList.DataSource = xmlTool.GetData("Book/Authors[ISBN=\"0002\"]"); 
        // dgList.DataBind();

        // 更新元素内容 
        // xmlTool.Replace("Book/Authors[ISBN=\"0002\"]/Content","ppppppp"); 
        // xmlTool.Save();

        // 添加一个新节点 
        // xmlTool.InsertNode("Book","Author","ISBN","0004"); 
        // xmlTool.InsertElement("Book/Author[ISBN=\"0004\"]","Content","aaaaaaaaa"); 
        // xmlTool.InsertElement("Book/Author[ISBN=\"0004\"]","Title","Sex","man","iiiiiiii"); 
        // xmlTool.Save();

        // 删除一个指定节点的所有内容和属性 
        // xmlTool.Delete("Book/Author[ISBN=\"0004\"]"); 
        // xmlTool.Save();

        // 删除一个指定节点的子节点 
        // xmlTool.Delete("Book/Authors[ISBN=\"0003\"]"); 
        // xmlTool.Save();

    }
}
